package main

import "fmt"

func main() {
	//变量声明一半使用var关键字；可以同时声明多个变量；指定变量的类型放在变量名称后
	//没有初始化默认为0
	var a = "liang"
	fmt.Println(a)
	//如果后面不加变量类型并且没有初始化，进行报错
	var b int
	fmt.Sprint(b)

	//简写
	f := "liang" // var f string = "liang"
	fmt.Println(f)

	var g, h int = 1, 2
	var j, k = 123, "hello"
	//不带声明格式的只能在函数中体现
	l, z := 123, "hello"
	fmt.Println(g, h, j, k, l, z)

	//常量
	//常量中的数据类型只可以是布尔型、数字型（整数型、浮点型和复数）和字符串型
	//const identifider [type] = value
	//可以省略类型说明符 [type]，因为编译器可以根据变量的值来推断其类型。
	//定义与变量相似，但需要用const来声明
	//ioba, 特殊常量，可以认为是一个可以被编译器修改的常量。iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前)，const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
	const (
		a2 = iota //0
		b2        //1
		c2        //2
		d2 = "ha" //独立值，iota += 1
		e2        //"ha"   iota += 1
		f2 = 100  //iota +=1
		g2        //100  iota +=1
		h2 = iota //7,恢复计数
		i2        //8
	)
	fmt.Println(a2, b2, c2, d2, e2, f2, g2, h2, i2)
}
